public class SearchRotate {
    public static void main(String[] args) {
        SearchRotate searchRotate = new SearchRotate();
        int[] nums = {4, 5, 6, 7, 0, 1, 2};
        int target = 0;
        int search = searchRotate.search(nums, target);
        System.out.println(search);
    }

    public int search(int[] nums, int target) {
        // search部分
        int i = 0, j = nums.length - 1;
        while (i <= j) {
            int m = (i + j) >>> 1;
            if (target == nums[m]) {
                // 两者相同 ,返回索引值
                return m;
            } else if (nums[m] < nums[j]) {
                //  逆序在左侧 -> 右边有序
                // 当target 在 m 右侧
                //  ->  num[m] < target 并且因为右侧有序, target 必须 小于边界值
                if (nums[m] < target && target <= nums[j]) {
                    // 左指针右移
                    i = m + 1;
                } else {
                    // target在 m 的左边
                    j = m - 1;
                }
            } else {
                // 逆序在右侧 -> 左边有序
                // 当 target 在 m 左侧
                // target < num[m] && target 必须大于左边界
                if (target < nums[m] && nums[i] <= target) {
                    // 右指针左移
                    j = m - 1;
                } else {
                    i = m + 1;
                }
            }
        }
        return -1;
    }
}
